cssfiltervalue: Reject invalid filters
authorMatthias Clasen <mclasen@redhat.com>
Sat, 6 Feb 2021 03:59:20 +0000 (22:59 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 6 Feb 2021 21:16:44 +0000 (16:16 -0500)
The Filter Effects Spec doesn't allow negative values
for most of the filter parameters.

gtk/gtkcssfiltervalue.c
testsuite/css/parser/invalid-filter1.css [new file with mode: 0644]
testsuite/css/parser/invalid-filter1.errors [new file with mode: 0644]
testsuite/css/parser/invalid-filter1.ref.css [new file with mode: 0644]

index eaf11c16b5ddf4b8a18b298e142f17707595d38f..c1c281c1e2d2f41d33e9ab0aafb5147826be8062 100644 (file)
@@ -755,7 +755,7 @@ gtk_css_filter_parse_number (GtkCssParser *parser,
 {
   GtkCssValue **values = data;
 
-  values[n] = _gtk_css_number_value_parse (parser, GTK_CSS_PARSE_NUMBER | GTK_CSS_PARSE_PERCENT);
+  values[n] = _gtk_css_number_value_parse (parser, GTK_CSS_PARSE_NUMBER | GTK_CSS_PARSE_PERCENT | GTK_CSS_POSITIVE_ONLY);
   if (values[n] == NULL)
     return 0;
 
@@ -769,7 +769,7 @@ gtk_css_filter_parse_length (GtkCssParser *parser,
 {
   GtkCssValue **values = data;
 
-  values[n] = _gtk_css_number_value_parse (parser, GTK_CSS_PARSE_LENGTH);
+  values[n] = _gtk_css_number_value_parse (parser, GTK_CSS_PARSE_LENGTH | GTK_CSS_POSITIVE_ONLY);
   if (values[n] == NULL)
     return 0;
 
diff --git a/testsuite/css/parser/invalid-filter1.css b/testsuite/css/parser/invalid-filter1.css
new file mode 100644 (file)
index 0000000..52580b8
--- /dev/null
@@ -0,0 +1,3 @@
+a {
+  filter: blur(-1px);
+}
diff --git a/testsuite/css/parser/invalid-filter1.errors b/testsuite/css/parser/invalid-filter1.errors
new file mode 100644 (file)
index 0000000..b91e500
--- /dev/null
@@ -0,0 +1 @@
+invalid-filter1.css:2:20-21: error: GTK_CSS_PARSER_ERROR_SYNTAX
diff --git a/testsuite/css/parser/invalid-filter1.ref.css b/testsuite/css/parser/invalid-filter1.ref.css
new file mode 100644 (file)
index 0000000..e69de29